package com.example.com.common.app;

import com.example.com.common.view.recycler.RecyclerAdapter;

/**
 * Created by ChenYiYao on 2018/2/1.
 * MVP模式中基本的契约类
 */

public interface BaseContract {
    //基本的view职责
    interface View<P extends Presenter> {
        // 公共的：显示错误信息
        void showError(String str);

        /**
         * 显示SnackBar提示信息
         *
         * @param str  显示的信息
         */
        void showSnackBarWarning(String str);

        // 公共的：显示progressDialog
        void showLoading(String str);

        /**
         * @param str  文本消息
         * @param flag dialog是否可取消,ture可取消
         */
        void showLoading(String str, boolean flag);

        //隐藏加载进度条
        void dimissLoading();

        // 支持设置一个Presenter
        void setPresenter(P presenter);
    }

    // 基本的Presenter职责
    interface Presenter {
        // 共用的开始触发
        void start();

        // 共用的销毁触发
        void destroy();
    }


    //基本的一个列表view职责
    interface BaseRecyclerView<P extends Presenter, ViewMode> extends View<P> {
        // 拿到适配器
        RecyclerAdapter<ViewMode> getRecyclerViewAdapter();

        //当适配器数据更改时触发
        void onAdapterDataChanged();

        //显示空界面

        /**
         * @param desc       空界面文本
         * @param btnVisible 是否显示刷新按钮
         */
        void showEmptyView(String desc, boolean btnVisible);
    }

    //基本的一个拥有刷新加载功能的列表view职责
    interface RecyclerView<P extends Presenter, ViewMode> extends BaseRecyclerView<P, ViewMode> {

        /**
         * 加载完毕,已没有更多
         *
         * @param b true 这还可以加载更多 false 则不能加载更多
         */
        void onShowNoMore(boolean b);


        /**
         * 刷新完成更改ui
         */
        void onRefreshFinish();

        /**
         * 加载更多完成刷新ui
         */
        void onLoadMoreFinish();
    }
}
